package com.itheima.homework.demo01;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.UUID;

/**
 * @Author 王加鑫
 * @Date 2021/5/25 19:59
 * @Version 1.0
 * 1、【编号2105】请编写程序，实现使用TCP协议将文件从客户端上传到服务器端。
 * 要求实现，客户端通过键盘录入一个jpg图片文件的路径，将该文件发送给服务器端；
 * 服务器端获取到文件后，保存到当前模块目录下，并给出“上传成功”的反馈。
 * 其中，上传的文件仅允许jpg格式的图片，保存到服务器端的文件，为防止重名覆盖，可使用32位UUID作为文件名。
 * 32位UUID的获取方式如下：
 * String uuid = UUID.randomUUID().toString().replaceAll("-", "");
 * 程序运行，客户端控制台显示的信息如下：
 * 请输入一个jpg图片文件的路径：
 * d:\itheima\mn.jpg
 * 服务器端反馈：
 * 上传成功
 */
public class ServerDemo01 {

    public static void main(String[] args) throws IOException {
        ServerSocket socket = new ServerSocket(10086);
        //服务器端和客户端建立连接(如果没有建立连接,服务器端会死等)
        Socket accept = socket.accept();
        //创建服务器端网络输入流
        InputStream is = accept.getInputStream();
        //创建服务器端本地输出流
        FileOutputStream fos = new FileOutputStream("day16_网络编程/" + UUID.randomUUID().toString().replaceAll("-","") + ".jpg");
        byte[] b1 = new byte[1024];
        int i1;
        while ((i1 = is.read(b1)) != -1){
            fos.write(b1,0,i1);
            fos.flush();
        }
        //给客户端返回一个提示
        OutputStream os = accept.getOutputStream();
        os.write("上传成功".getBytes());
        os.flush();
        accept.shutdownOutput();

        fos.close();
        accept.close();
        socket.close();
    }
}
